package com.hww.common.util;

import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.widget.Toast;

import java.util.Locale;

/**
 * @author hww
 * @date 2019-07-24.
 * email：
 * description：
 */
public class TextSpeech {
    private static TextSpeech textSpeech = new TextSpeech();

    public static TextSpeech getInstance() {
        return textSpeech;
    }

    private TextSpeech() {
    }

    private TextToSpeech tts;

    /**
     * 初始化语音合成引擎。
     * 使用TextToSpeech类来初始化语音合成引擎，并设置语言为简体中文。如果语言设置成功，将准备就绪
     * 用于后续的语音合成操作；如果语言设置失败，则提示用户语言不可用。
     *
     * @param context 应用程序的上下文，用于初始化TextToSpeech引擎。
     */
    public void initSpeech(final Context context) {
        tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                // TODO Auto-generated method stub
                if (null != tts && status == TextToSpeech.SUCCESS) {
                    //支持的语言类型(依赖讯飞语音支持中文合成)
                    int result = tts.setLanguage(Locale.SIMPLIFIED_CHINESE);

                    if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                        Toast.makeText(context, "语言不可用,不支持语音播报功能!", Toast.LENGTH_SHORT).show();
                    }
                    Log.i("hwwFace", "initSpeech  getDefaultEngine = " + tts.getDefaultEngine() + "   " + result);
                }
            }
        });
    }


    /**
     * 设置语言播报速度
     *
     * @param speechRate
     */
    public void setSpeechRate(float speechRate) {
        if (null != tts) {
            tts.setSpeechRate(speechRate);
        }
    }

    /**
     * @param con
     */
    public void speak(String con) {
        if (null != tts && !StringUtils.isEmpty(con)) {
            if (!tts.isSpeaking()) {
                int speak = tts.speak(con, TextToSpeech.QUEUE_FLUSH, null);
            }
        }
    }

    /**
     * 使用Text to Speech（TTS）服务播放给定的消息。
     * 如果TTS引擎已初始化且消息不为空，则开始播放消息。
     * 如果当前正在播放其他消息，则停止之前的播放，以确保只播放最新的消息。
     *
     * @param message 要播放的文本消息。
     */
    public void ttsSpeak(String message) {
        if (tts != null && !StringUtils.isEmpty(message)) {
            int speak = tts.speak(message, TextToSpeech.QUEUE_FLUSH, null);
        }
    }

    /**
     * 关闭注销TTS的资源
     */
    public void closeTTS() {
        if (null != tts) {
            tts.stop();
            tts.shutdown();
            tts = null;
        }
    }

}
